// pages/car/car.js
Page({
  //1.编辑按钮的分析
  // 1.1点击编辑，切换编辑按钮的文字
  //   1.1.1编辑按钮的字，需要提取出来，作为一个变量 <button >{{editText}}</button>
  //   1.1.2在切换文字的时候，需要做判断，当前是编辑还是完成状态，根据不同的状态，给editText不同内容
  // 1.2控制结算和删除的显示或者隐藏
  //   1.2.1通过编辑文字，直接在wxml页面控制结算和删除按钮的显示和隐藏

  //2.获取本地数据，进行页面渲染，因为onLoad只加载一次，所以我们在onShow里面获取本地数据
  //因为点击就会加载

  //3. 全选按钮
  // 3.1 点击时，控制自己的选中与非选中，也就是动态修改all也就是动态修改
  // 3.2 同时，所有商品前面的单选按钮需要与allCh按钮需要与保持一致

  //4 商品前的单选按钮
  // 4.1要控制自己的选中状态
  // 4.2 再点击时候，点击中的radio的索引值传递过来，拿到索引值才可以操作数组里面的第几项的singleChecked
  // 4.3商品前按钮只要有一个是不选中，则全选按钮不选中，如果商品按钮全选中，全选按钮才选中
  /**
   * 页面的初始数据
   */
  data: {
    editText: "编辑",
    //控制全选按钮的选中状态
    allChecked: false,
    //存储商品列表数据
    cartList: [],
    //总价格
    allPrice:0
  },
  //处理编辑按钮的函数 handleEdit
  handleEdit() {
    // if (this.data.editText == "编辑"){
    //   var txt="完成"
    // }else{
    //   var txt = "编辑"
    // }
    //先判断当前按钮的文字，再进行赋值
    var txt = this.data.editText == "编辑" ? "完成" : "编辑"
    this.setData({
      editText: txt
    })
  },
  
  //全选按钮处理函数
  handleAllCheck() {
    var allChecked = !this.data.allChecked
    this.setData({
      allChecked
    })
    //修改所有商品前面的单选按钮
    var arr = this.data.cartList;
    arr.forEach((v, i) => {
      //v 是数组的每一项，i表示数组的索引
      v.singleChecked = allChecked
    })
    //console.log(arr)
    this.setData({
      cartList: arr
    })

    //调用计算总价的函数 
    this.getAllPrice()
  },

  //封装计算总价的函数
  getAllPrice(){
    var price = 0;
    //取出所有商品
    var arrList = this.data.cartList;
    arrList.forEach((v, i) => {
      if (v.singleChecked) {
        price += v.num * v.price
      }
    })
    console.log(price)
    this.setData({
      allPrice: price
    })
  },

  //商品前的单选按钮
  handleSingleCheck(e){
    //获取到点击按钮的索引值
    var index=e.currentTarget.dataset.index;
    //console.log(index)   
    var arr=this.data.cartList;
    //修改自己的选中状态
    arr[index].singleChecked = !arr[index].singleChecked
    //把修改好的arr写入data里面cartList
    this.setData({
      cartList:arr
    });
    //假设全选按钮是选中
    var flag=true;
    //验证假设 遍历cartList数组，判断每一个商品前面的按钮是否选中的
    var arr=this.data.cartList;
    arr.forEach((v,i)=>{
      if(v.singleChecked==false){
        //证明出现一个不选中的商品
        //推翻假设
        flag=false;
        return;
      }
    })
    //通过假设的结果来决定全选按钮是否选中
    // if(flag){
    //   //flag为true 则证明了所有商品都是选中的
    //   this.setData({
    //     allChecked:true
    //   })
    // }else{
    //   //flag为false 则证明了所有商品有一个没有选中的 ，那么全选为fales
    //   this.setData({
    //     allChecked: false
    //   })
    // }
    this.setData({
      allChecked:flag
    })
    //调用计算总价的函数 
    this.getAllPrice()
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function(options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function() {
    wx.getStorage({
      key: 'cartList',
      success: (res) => {
        console.log(res)
        this.setData({
          cartList: res.data
        })
      },
    })
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function() {

  }
})